/*
 * @Author: C.
 * @Date: 2021-06-03 14:56:06
 * @LastEditTime: 2021-06-21 20:00:32
 * @Description: file content
 */
import Pager from './Pager'
class Table {
  // 请求参数
  form={}
  tableData=[]
  // 分页器
  pager=null
  // 接口
  api=null
  // 查询loading
  loading=false
  // 备份的Form表单 以便重置
  copyForm=''
  constructor (form, API) {
    // 合并参数
    Object.assign(this.form, form)
    // 接口
    this.api = new API(this.getData)
    // 类型检测
    this.typeCheck()
    // 分页器
    this.pager = new Pager(this.getData)
    // 备份表单
    this.copyForm = JSON.stringify(this.form)
  }
  /**
   * @description:
   * @param {*} pageForm 携带的参数
   * @param {*} sign 事件签名 区分事件类型
   * @return {*}
   */
  getData=(pageForm, sign = '') => {
    // 是否保持分页状态
    if (sign !== 'hold-pager') {
      this.pager.CurrentPage = 1
      this.form.CurrentPage = 1
    }
    if (pageForm) {
      Object.assign(this.form, pageForm)
    }
    this.loading = true
    this.api.getData(this.form).then(res => {
      this.tableData = res.ResultDatas
      this.pager.Total = res.PageCount
      this.loading = false
    })
  }
  // 绑定时间
  timeChange=(e) => {
    e
      ? this.getData({
        StartDate: e[0],
        EndDate: e[1]
      })
      : this.getData({
        StartDate: '',
        EndDate: ''
      })
  }
  // 参数校验 接口必须实现getData方法
  typeCheck () {
    if (this.api.getData) return
    console.error('在API类中必须实现getData方法，并且返回值为promise对象')
  }
  reset=() => {
    // 重置表单
    this.form = JSON.parse(this.copyForm)
    // 重置分页参数 并重新查询
    this.pager.pageReset()
  }
}
export default Table
